package com.cloudeasy.api.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;

/**
 * 结果状态码枚举
 */
@Getter
@AllArgsConstructor
public enum ResultCodeEnum {
    /**
     * 成功
     */
    SUCCESS(20000, "成功"),
    /**
     * 账号已存在
     */
    ACCOUNT_EXISTS(20001, "账号已存在"),
    /**
     * 名称已存在
     */
    NAME_EXISTS(20002, "名称已存在"),
    /**
     * 验证码错误
     */
    VERIFICATION_CODE_ERROR(20003, "验证码错误"),
    /**
     * 登录失败，请检查您的账号和密码
     */
    LOGIN_FAILED(20004, "登录失败，请检查您的账号和密码"),
    /**
     * 用户已被锁定
     */
    ACCOUNT_LOCKED(20005, "用户已被锁定"),
    /**
     * 不存在该账号
     */
    ACCOUNT_NOT_EXISTS(20006, "不存在该账号"),
    /**
     * 登录状态失效，请重新登录
     */
    LOGIN_STATUS_INVALID(20007, "登录状态失效，请重新登录"),
    /**
     * 您无权进行此项操作
     */
    NO_PERMISSION_OPERATE(20008, "您无权进行此项操作"),
    /**
     * 参数错误
     */
    PARAMETER_ERROR(20009, "参数错误"),
    /**
     * 未设置管理员身份切换密码
     */
    NO_SWITCH_ADMIN_PASSWORD(20010, "未设置管理员身份切换密码"),
    /**
     * 用户已被限制管理功能
     */
    ADMIN_OPERATE_LIMIT(20010, "用户已被限制管理功能"),
    /**
     * 该邮箱不存在
     */
    EMAIL_NOT_EXISTS(20011, "该邮箱不存在"),
    /**
     * 邮件发送错误
     */
    SEND_EMAIL_ERROR(20012, "邮件发送错误"),
    /**
     * 禁止更新
     */
    FORBID_UPDATE(20013, "禁止更新"),
    /**
     * 禁止关注
     */
    FORBID_ATTENTION(20014, "禁止关注"),
    /**
     * 禁止删除
     */
    FORBID_DELETE(20015, "禁止删除"),
    /**
     * 远程调用失败
     */
    REMOTE_ERROR(20016, "远程调用失败"),
    /**
     * 重复操作
     */
    REPEAT_ERROR(20017, "重复操作"),
    /**
     * ID不存在
     */
    ID_NOT_EXISTS(20018, "ID不存在"),
    /**
     * TOKEN解析错误
     */
    TOKEN_PARSE_ERROR(20019, "TOKEN解析错误"),
    /**
     * 区域不是空的
     */
    AREA_NOT_NULL(20020, "区域不是空的"),
    /**
     * 不是管理员
     */
    NOT_IS_ADMIN(20021, "不是管理员"),
    /**
     * 错误
     */
    ERROR(20022, "错误");

    /**
     * 状态码
     */
    private Integer code;
    /**
     * 消息
     */
    private String message;

    /**
     * 获取指定code的结果状态码枚举
     *
     * @param code 要获取的code
     * @return 如果存在，返回对应的枚举，如果不存在，返回null
     */
    public static ResultCodeEnum get(Integer code) {
        for (ResultCodeEnum resultCodeEnum : ResultCodeEnum.values()) {
            if (Objects.equals(code, resultCodeEnum.getCode())) {
                return resultCodeEnum;
            }
        }
        return null;
    }
}
